﻿(function () {
    /*------------------------------------------------
        table templet 的公用方法
    ------------------------------------------------*/
    /**
     * 表格序号, 从1 开始
     */
    window.tplLayIndex = function (d) {
        return d.LAY_INDEX;
    }

    /**
     * 表格下标,从0开始
     */
    window.tplLayTableIndex = function (d) {
        return d.LAY_TABLE_INDEX;
    }

    /**
     * 创建时间
     */
    window.tplCreateTime = function (d) {
        return toDateString(d.createTime);
    }

    /**
     * 修改时间
     */
    window.tplUpdateTime = function (d) {
        return toDateString(d.updateTime);
    }

    /**
     * 判断性别
     * @param d
     * @returns {*}
     */
    window.tplSex = function (d) {
        if (d.sex == '1') {
            return '男'
        } else if (d.sex == '2') {
            return '女';
        } else {
            return '保密';
        }
    }

    /**
     * 格式化时间, 不处理空值
     */
    window.toDateString = function (d, format) {
        if (d == null) {
            return "";
        }
        return toDateStringAndNull(d, format);
    }

    /**
     * 空值就格式化当前时间
     */
    window.toDateStringAndNull = function (d, format) {
        var date = new Date(d || new Date())
            , ymd = [
            this.digit(date.getFullYear(), 4)
            , this.digit(date.getMonth() + 1)
            , this.digit(date.getDate())
        ]
            , hms = [
            this.digit(date.getHours())
            , this.digit(date.getMinutes())
            , this.digit(date.getSeconds())
        ];

        format = format || 'yyyy-MM-dd HH:mm:ss';

        return format.replace(/yyyy/g, ymd[0])
            .replace(/MM/g, ymd[1])
            .replace(/dd/g, ymd[2])
            .replace(/HH/g, hms[0])
            .replace(/mm/g, hms[1])
            .replace(/ss/g, hms[2]);
    }

    /**
     * 数字前置补零
     */
    window.digit = function (num, length, end) {
        var str = '';
        num = String(num);
        length = length || 2;
        for (var i = num.length; i < length; i++) {
            str += '0';
        }
        return num < Math.pow(10, length) ? str + (num | 0) : num;
    };

    /**
     *js获取当前日期前后N天的方法
     * https://www.cnblogs.com/DreamDrive/p/6255631.html
     */
    window.getDateStr = function (AddDayCount) {
        var dd = new Date();
        dd.setDate(dd.getDate() + AddDayCount);//获取AddDayCount天后的日期
        var y = dd.getFullYear();
        var m = dd.getMonth() + 1;//获取当前月份的日期
        var d = dd.getDate();
        return y + "-" + digit(m) + "-" + digit(d);
    }

    /**
     * 循环日期
     * @param begin 开始日期  yyyy-MM-dd
     * @param end 结束日期 yyyy-MM-dd
     * @param fun 回调函数 ,参数 day
     */
    window.eachDate = function (begin, end, fun) {
        begin = begin.length > 10 ? begin.substring(0, 10) : begin;
        end = end.length > 10 ? end.substring(0, 10) : end;
        var ab = begin.split("-");
        var ae = end.split("-");
        var db = new Date();
        db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]);
        var de = new Date();
        de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]);
        var unixDb = db.getTime();
        var unixDe = de.getTime();
        for (var k = unixDb; k <= unixDe;) {
            var d = new Date(parseInt(k));
            fun((toDateString(d, "yyyy-MM-dd")));
            k = k + 24 * 60 * 60 * 1000;
        }
    }

    /**
     * 从数组中删除某个元素
     * @param params   json 格式参数
     * --------------------------------------
     *  arr : 待删除的数组
     *  name : 字段的属性值,  如果不是对象数组,这个属性不用设置
     *  value : 要删除的值, 可以是 string 或者 string arr, 例如 'aaa' 或者 ['aaa','bbb']
     *  ----------------------------------
     *  返回结果: 新的数组
     */
    window.arrDel = function (params) {
        if (params == null) {
            return;
        }
        var arr = params.arr;
        var name = params.name;
        var value = params.value;
        var array = [];
        for (var i = 0; i < arr.length; i++) {
            var val = null;
            if (name != null && name.length > 0 && typeof arr[i] == 'object') {
                val = arr[i][name];
            } else {
                val = arr[i];
            }
            var flg = false; // 是否存在
            if (typeof value == 'object' && value.length != undefined) {
                for (var j = 0; j < value.length; j++) {
                    if (value[j] == val) {
                        flg = true;
                        break;
                    }
                }
            } else {
                flg = val == value;
            }
            if (flg == false) {
                array[array.length] = arr[i];
            }
        }
        return array;
    }

    /**
     * 根据数组中某个字段的值,在这个数组中查询出这个元素
     * @param params   json 格式参数
     * --------------------------------------
     *  arr : 待查询的数组
     *  name : 字段的属性值,  如果不是对象数组,这个属性不用设置
     *  value : 要查询的值
     *  ----------------------------------
     *  返回结果 {index : '元素的下标' , value : '对象的值' }
     */
    window.arrQuery = function (params) {
        if (params == null) {
            return;
        }
        var arr = params.arr;
        var name = params.name;
        var value = params.value;
        var obj = {};
        for (var i = 0; i < arr.length; i++) {
            var val = null;
            if (name != null && name.length > 0 && typeof arr[i] == 'object') {
                val = arr[i][name];
            } else {
                val = arr[i];
            }
            if (val == value) {
                obj.index = i;
                obj.value = arr[i];
                break;
            }
        }
        return obj;
    }

    /*-----------------------------------------------------------------------------------------------------*/
    /*--------------------------     js 对url 的操作         ------------------------------------------------*/

    /*-----------------------------------------------------------------------------------------------------*/
    window.getRootPath_web = function () {
        var curWwwPath = window.document.location.href;
        var pathName = window.document.location.pathname;
        var pos = curWwwPath.indexOf(pathName);
        var localhostPaht = curWwwPath.substring(0, pos);
        var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);
        return (localhostPaht + projectName);
    }

    /**
     * 获取url里的参数
     */
    window.getUrlParam = function (k) {
        var regExp = new RegExp('([?]|&)' + k + '=([^&]*)(&|$)');
        var result = window.location.href.match(regExp);
        if (result) {
            return decodeURIComponent(result[2]);
        } else {
            return null;
        }
    }

    /**
     * 获取地址信息
     * @returns {{urlHead: string, urlBody: string, urlParam: string}}
     */
    window.getUrlInfo = function () {
        var curWwwPath = window.document.location.href;
        var pathName = window.document.location.pathname;
        var pos = curWwwPath.indexOf(pathName);
        var localhostPaht = curWwwPath.substring(0, pos);

        // 参数
        var posindex = curWwwPath.indexOf("?");
        var params = '';
        if (posindex != -1) {
            params = curWwwPath.substring(posindex + 1);
        }
        var urlBody = pathName.replace("/p/", "");
        var data = {
            url: curWwwPath
            , urlHead: localhostPaht
            , urlBody: urlBody
            , urlParam: params
        }
        return data;
    }

    /**
     * 多元表达式的一种应用
     * @param params
     * ---------------------------------------
     getContrastVal({
            key: d.reviewType
            , arr: {'1': '赞', '2': '踩', '3': '吐槽'}
        });
     * ---------------------------------------
     * @returns {*}
     */
    window.getContrastVal = function (params) {
        var key = params.key;
        var arr = params.arr;
        if (key == null || arr == null) {
            return null;
        }
        var val = arr[key];
        var other = params.other;
        return val != null ? val : params.other;
    }

    /**
     * 转化树结构数据,会递归重新构建数据结构, 数据量大可能会影响速度
     * @param params json格式的参数
     * --------------------------------------------
     * @param list 数据集合
     * @param parentVal 父节点的值, 默认 null
     * @param level 初始等级  , 默认 1
     * @param id id字段 , 默认 'id'
     * @param parentId 父节点字段, 默认 'parentId'
     * @param title title字段, 默认 'title'
     */
    window.converDtreeData1 = function (params) {
        params = params != null ? params : {};
        var parentVal = params.parentVal; // 默认 null
        var level = params.level != null ? params.level : 1;
        var id = params.id != null ? params.id : 'id';
        var parentId = params.parentId != null ? params.parentId : 'parentId';
        var title = params.title != null ? params.title : 'title';
        var list = params.list;

        var jsonArr = [];
        var newList = [];
        for (var i = 0; i < list.length; i++) {
            if (parentVal == list[i][parentId]) {
                jsonArr.push({
                    id: list[i][id]
                    , title: list[i][title]
                    , isLast: false
                    , level: level
                    , spared: false
                    , parentId: parentVal
                    , basicData: list[i] // 自定义数据
                });
            } else {
                newList.push(list[i]);
            }
        }
        level++;
        for (var i = 0; i < jsonArr.length; i++) {
            var arr = converDtreeData1({
                list: newList
                , parentVal: jsonArr[i].id
                , level: level
                , id: id
                , parentId: parentId
                , title: title
            });
            if (arr.length == 0) {
                jsonArr[i].isLast = true;
            } else {
                jsonArr[i].children = arr;
            }
        }
        return jsonArr;
    }

    /**
     * 转化树结构数据, 只是循环一次,修改下数据结构, 推荐使用这个
     * , dataFormat: 'list' ,  要设置这个
     * @param params json格式的参数
     * --------------------------------------------
     * @param list 数据集合
     * @param id id字段 , 默认 'id'
     * @param parentId 父节点字段, 默认 'parentId'
     * @param title title字段, 默认 'title'
     */
    window.converDtreeData2 = function (params) {
        var jsonArr = [];

        params = params != null ? params : {};
        var id = params.id != null ? params.id : 'id';
        var parentId = params.parentId != null ? params.parentId : 'parentId';
        var title = params.title != null ? params.title : 'title';
        var list = params.list;
        var fun = params.fun != null ? params.fun : function (j, l) {
        };

        for (var i = 0; i < list.length; i++) {
            var parentIdVal = list[i][parentId];
            if (parentIdVal != null && parentIdVal == "") {
                parentIdVal = null;
            }
            var treeNodeData = {
                id: list[i][id]
                , title: list[i][title]
                , parentId: parentIdVal
                , basicData: list[i] // 自定义数据
            };
            var checked = list[i].checked;
            if (checked != null) {
                // isChecked: 0 未选中  1 选中 2 半选
                treeNodeData.checkArr = [{"type": "0", "isChecked": checked ? "1" : "0"}]
            }
            jsonArr.push(treeNodeData);
        }
        return jsonArr;
    }

    /**
     * 元素(按钮)启用
     * @param elem
     */
    window.elemEnable = function (elem) {
        $(elem).removeClass("layui-btn-disabled");
        $(elem).removeAttr("disabled");
    }

    /**
     * 元素(按钮)禁用
     * @param elem
     */
    window.elemDisable = function (elem) {
        $(elem).addClass("layui-btn-disabled");
        $(elem).attr("disabled", "");
    }

    /**
     * 文本框 启用
     */
    window.inputEnable = function (params) {
        var othis = getInputOthis(params);
        if (othis != null) {
            othis.removeClass("layui-bg-gray");
            othis.removeAttr("readonly");
        }
    }

    /**
     * 文本框 只读
     */
    window.inputDisable = function (params) {
        var othis = getInputOthis(params);
        if (othis != null) {
            othis.addClass("layui-bg-gray");
            othis.attr("readonly", "");
        }
    }

    /**
     * 获取 input jquery对象
     * @param params
     */
    window.getInputOthis = function (params) {
        params = params != null ? params : {};
        var id = params.id;
        var name = params.name;
        if (id != null) {
            return $('#' + id);
        }
        if (name != null) {
            return $("input[name='" + name + "']");
        }
        return null;
    }

    /**
     * 关闭当前弹出层
     */
    window.closeCurrentWin = function () {
        var current_index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
        parent.layer.close(current_index); //用父窗口的layer对象关闭当前弹出层
    }

})();